# 文件名: logger.py
import logging
import os
from datetime import datetime
import sys

class Logger:
    """
    统一日志记录类
    支持多级别日志记录和文件/控制台输出
    """
    
    # 日志级别映射
    LEVELS = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'critical': logging.CRITICAL
    }
    
    def __init__(self, log_dir="logs", log_level="info", module_name=None):
        """
        初始化日志记录器
        
        Args:
            log_dir: 日志文件存储目录
            log_level: 日志级别 (debug, info, warning, error, critical)
            module_name: 模块名称，用于区分不同模块的日志
        """
        # 创建日志目录
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)
        
        # 设置模块名称
        self.module_name = module_name or "main"
        
        # 创建logger
        self.logger = logging.getLogger(self.module_name)
        self.logger.setLevel(self.LEVELS.get(log_level.lower(), logging.INFO))
        
        # 防止日志重复
        if not self.logger.handlers:
            # 日志文件名格式: 日期_模块名.log
            log_file = os.path.join(log_dir, f"{datetime.now().strftime('%Y-%m-%d')}_{self.module_name}.log")
            
            # 创建文件处理器
            file_handler = logging.FileHandler(log_file, encoding='utf-8')
            file_handler.setLevel(self.logger.level)
            
            # 创建控制台处理器
            console_handler = logging.StreamHandler(sys.stdout)
            console_handler.setLevel(self.logger.level)
            
            # 日志格式: [时间] [级别] [模块] 消息
            formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s')
            file_handler.setFormatter(formatter)
            console_handler.setFormatter(formatter)
            
            # 添加处理器
            self.logger.addHandler(file_handler)
            self.logger.addHandler(console_handler)
    
    def debug(self, message, **kwargs):
        """
        记录调试信息
        
        Args:
            message: 日志消息
            **kwargs: 额外参数，如exc_info=True
        """
        self.logger.debug(message, **kwargs)
    
    def info(self, message, **kwargs):
        """
        记录一般信息
        
        Args:
            message: 日志消息
            **kwargs: 额外参数，如exc_info=True
        """
        self.logger.info(message, **kwargs)
    
    def warning(self, message, **kwargs):
        """
        记录警告信息
        
        Args:
            message: 日志消息
            **kwargs: 额外参数，如exc_info=True
        """
        self.logger.warning(message, **kwargs)
    
    def error(self, message, **kwargs):
        """
        记录错误信息
        
        Args:
            message: 日志消息
            **kwargs: 额外参数，如exc_info=True
        """
        self.logger.error(message, **kwargs)
    
    def critical(self, message, **kwargs):
        """
        记录严重错误信息
        
        Args:
            message: 日志消息
            **kwargs: 额外参数，如exc_info=True
        """
        self.logger.critical(message, **kwargs)

# 简单工厂函数，用于创建各模块的日志记录器
def get_logger(module_name=None, log_level="info"):
    """
    获取日志记录器实例
    
    Args:
        module_name: 模块名称
        log_level: 日志级别
    
    Returns:
        Logger: 日志记录器实例
    """
    return Logger(module_name=module_name, log_level=log_level)

